/**
 * 模块配置操作
 */
const path = require("path")
const _ = require('lodash')
const chalk = require('chalk')
const INTERFACE = require('../service/INTERFACE');
const FormData = require('form-data');
const fetch = require('../util/fetch')
const { FloorChannelType } = require("../common");
const { getSetting } = require('../service/setting')

const { readFloors,
	readEditPropertyJson,
	readConfigData } = require('../service/proxy')
// 楼层画布数据文件路径
const floorsFile = path.resolve(process.cwd(), "datas", "floors.json")

/**
 * 渲染或者拉取右侧配置项
 * 目前node端只能临时通过枚举支持有限的几个简单数据源+1个复杂轮播数据源的转换
 * @param templateId 整页模板id
 * @param moduleId 模块id（拉取配置项需要传递）
 * @param floorId 楼层id（拉取配置项需要传递）
 * @param editPropertyJson 配置项描述文件-和水滴格式对齐（单纯渲染时传递）
 * @param {*} ctx
 * @return 返回右侧配置数据 (moduleConfig + configData)
 */
const onGetModuleConfig = async (ctx) => {
	const { query } = ctx.request
	const changeQuery = {
		moduleType: FloorChannelType.ISV,
		...query,
	}
    const {floorId, moduleFlag, moduleType} = changeQuery
	if (moduleFlag) {
		const configJson = readEditPropertyJson(moduleFlag)
		const formData = new FormData()
		const param = {
			jsonContent: configJson
		}
        formData.append('moduleType', moduleType)
		formData.append('jsonContent', JSON.stringify(param.jsonContent))
		const debug = getSetting("debug")
		if(debug === true || debug === "true"){
			console.log(`getModuleConfigModular param:\n`, chalk.yellow(JSON.stringify(param, null, 2)))
		}
		// 调用后端接口实现json转适配当前form表单的配置数据
		const res = await fetch({
			ctx,
			data: formData,
			method: 'POST',
			url: INTERFACE.getModuleConfigDataByJSON,
		})
		const result = res.data
		if (result && result.success) {
			const middleDataDefine = result?.data?.curTemplate?.middleDataDefine ?? null
			if (middleDataDefine) {
				// 拉取配置项 优先使用楼层实例上的配置数据，再使用模块上的配置数据
				const floorContent = readFloors(floorsFile)
				let configData = {}
				const mconfigData = readConfigData(moduleFlag)
				const floor = floorContent.floors.find((floor) => {
					return floor.uid == floorId
				})
				if (!_.isEmpty(floor.configData)) {
					configData = floor.configData
				}
				else if (!_.isEmpty(mconfigData)) {
					configData = mconfigData
				}
				ctx.send({ data: { code: 200, data: { configDefineJSON: configJson, configInitData: middleDataDefine, configSaveData: configData } } })
			}
			else {
				ctx.send({ data: { code: 300, msg: `获取配置数据middleDataDefine为空` } })
			}
		} else {
			let code = 300
			// if(result.code != undefined){
			// 	code = result.code
			// }
			ctx.send({ data: { code, msg: result.msg || `获取配置数据发生错误` } })
		}
	}
	else {
		ctx.send({ data: { code: 300, msg: `参数不正确` } })
	}
}

module.exports = {
	onGetModuleConfig
}
